#!/usr/bin/env python3
"""
Xfce4 Appfinder MCP Server

面向软件：xfce4-appfinder 和 xfrun4（Xfce 桌面环境的应用程序查找器和快速运行工具）

所有 MCP tool 列表：
1. xfce4_appfinder_help - 显示 xfce4-appfinder 帮助信息
   - 参数：help_type (str): 帮助类型，可选值：'help', 'help-all', 'help-gtk'
   - 返回：统一 JSON 结构

2. xfce4_appfinder_version - 显示 xfce4-appfinder 版本信息
   - 参数：无
   - 返回：统一 JSON 结构

3. xfce4_appfinder_replace - 替换现有的 xfce4-appfinder 实例
   - 参数：无
   - 返回：统一 JSON 结构

4. xfce4_appfinder_quit - 退出所有 xfce4-appfinder 实例
   - 参数：无
   - 返回：统一 JSON 结构

5. xfce4_appfinder_disable_server - 禁用 D-Bus 服务模式
   - 参数：无
   - 返回：统一 JSON 结构

6. xfce4_appfinder_display - 指定 X display 显示
   - 参数：display (str): X display 地址，如 ':0'
   - 返回：统一 JSON 结构

7. xfce4_appfinder_collapsed - 以折叠模式启动
   - 参数：无
   - 返回：统一 JSON 结构

8. xfrun4_help - 显示 xfrun4 帮助信息
   - 参数：help_type (str): 帮助类型，可选值：'help', 'help-all', 'help-gtk'
   - 返回：统一 JSON 结构

所有工具返回的统一 JSON 结构：
{
    "success": bool,      # 命令是否成功执行
    "command": str,       # 执行的完整命令
    "exit_code": int,     # 命令退出码
    "stdout": str,        # 标准输出内容
    "stderr": str         # 标准错误内容
}
"""

import subprocess
import shlex
from typing import Optional
from mcp.server.fastmcp import FastMCP, Context

mcp = FastMCP("Xfce4 Appfinder MCP Server")


@mcp.tool()
def xfce4_appfinder_help(help_type: str = "help") -> dict:
    """
    显示 xfce4-appfinder 帮助信息
    
    参数:
        help_type: 帮助类型，可选值：'help'（基本帮助）、'help-all'（所有帮助）、'help-gtk'（GTK+选项帮助）
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    valid_help_types = ["help", "help-all", "help-gtk"]
    if help_type not in valid_help_types:
        return {
            "success": False,
            "command": f"xfce4-appfinder --{help_type}",
            "exit_code": 1,
            "stdout": "",
            "stderr": f"错误：不支持的帮助类型 '{help_type}'，支持的选项：{valid_help_types}"
        }
    
    cmd = f"xfce4-appfinder --{help_type}"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_version() -> dict:
    """
    显示 xfce4-appfinder 版本信息
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = "xfce4-appfinder --version"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_replace() -> dict:
    """
    替换现有的 xfce4-appfinder 实例
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = "xfce4-appfinder --replace"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_quit() -> dict:
    """
    退出所有 xfce4-appfinder 实例
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = "xfce4-appfinder --quit"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_disable_server() -> dict:
    """
    禁用 D-Bus 服务模式，不使用或成为 D-Bus 服务
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = "xfce4-appfinder --disable-server"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_display(display: str = ":0") -> dict:
    """
    指定 X display 显示
    
    参数:
        display: X display 地址，例如 ':0'
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = f"xfce4-appfinder --display={display}"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfce4_appfinder_collapsed() -> dict:
    """
    以折叠模式启动 xfce4-appfinder
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    cmd = "xfce4-appfinder --collapsed"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


@mcp.tool()
def xfrun4_help(help_type: str = "help") -> dict:
    """
    显示 xfrun4 帮助信息
    
    参数:
        help_type: 帮助类型，可选值：'help'（基本帮助）、'help-all'（所有帮助）、'help-gtk'（GTK+选项帮助）
    
    返回:
        JSON 结构：包含命令执行结果的标准输出、标准错误和退出码
    """
    valid_help_types = ["help", "help-all", "help-gtk"]
    if help_type not in valid_help_types:
        return {
            "success": False,
            "command": f"xfrun4 --{help_type}",
            "exit_code": 1,
            "stdout": "",
            "stderr": f"错误：不支持的帮助类型 '{help_type}'，支持的选项：{valid_help_types}"
        }
    
    cmd = f"xfrun4 --{help_type}"
    result = subprocess.run(shlex.split(cmd), capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": cmd,
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }


if __name__ == "__main__":
    mcp.run()